home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Dev / Oberon / examples.lha / Examples / Libraries / Workbench / AppWindow.mod < prev    next >
Encoding:
Text File  |  1995-07-02  |  3.4 KB  |  113 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: AppWindow.mod $
  4.   Description:
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.5 $
  8.       $Author: fjc $
  9.         $Date: 1995/07/02 17:01:00 $
  10.  
  11.   Copyright © 1994-1995, Frank Copeland.
  12.   This example program is part of Oberon-A.
  13.   See Oberon-A.doc for conditions of use and distribution.
  14.  
  15. *************************************************************************)
  16.  
  17. <* STANDARD- *>
  18.  
  19. MODULE AppWindow;
  20.  
  21. IMPORT
  22.   SYS := SYSTEM,
  23.   e   := Exec,
  24.   u   := Utility,
  25.   I   := Intuition,
  26.   wb  := Workbench,
  27.   IO  := StdIO;
  28.  
  29. CONST VersionTag = "$VER: AppWindow 1.3 (25.1.95)\r\n";
  30.  
  31. VAR
  32.  
  33.   awport : e.MsgPortPtr;
  34.   win    : I.WindowPtr;
  35.   appwin : wb.AppWindowPtr;
  36.   imsg   : I.IntuiMessagePtr;
  37.   amsg   : wb.AppMessagePtr;
  38.  
  39.   winsig, appwinsig : SHORTINT;
  40.   id, userdata : LONGINT;
  41.   signals : SET;
  42.   done : BOOLEAN;
  43.   i : INTEGER;
  44.  
  45. BEGIN (* AppWindow *)
  46.   IF I.base.libNode.version >= 37 THEN
  47.     IF (wb.base # NIL) & (wb.base.version >= 37) THEN
  48.       awport := e.CreateMsgPort ();
  49.       IF awport # NIL THEN
  50.         win := I.OpenWindowTagsA
  51.           ( NIL,
  52.             I.waWidth,  200,
  53.             I.waHeight, 50,
  54.             I.waIDCMP,  {I.closeWindow},
  55.             I.waFlags,  {I.windowClose, I.windowDrag},
  56.             I.waTitle,  SYS.ADR ("AppWindow"),
  57.             u.done );
  58.         IF win # NIL THEN
  59.           id := 1; userdata := 0;
  60.           appwin := wb.AddAppWindow ( id, userdata, win, awport, NIL );
  61.           IF appwin # NIL THEN
  62.             IO.WriteStr ("AppWindow added... Drag files into AppWindow\n");
  63.             winsig := win.userPort.sigBit;
  64.             appwinsig := awport.sigBit;
  65.             done := FALSE;
  66.             WHILE ~done DO
  67.               (* Wait for IDCMP messages and AppMessages *)
  68.               signals := e.Wait ({winsig, appwinsig});
  69.               IF winsig IN signals THEN (* Got an IDCMP message *)
  70.                 LOOP
  71.                   imsg := SYS.VAL (I.IntuiMessagePtr,
  72.                     e.GetMsg (win.userPort));
  73.                   IF imsg = NIL THEN EXIT END;
  74.                   IF imsg.class = {I.closeWindow} THEN
  75.                     done := TRUE
  76.                   END;
  77.                   e.ReplyMsg (imsg)
  78.                 END;
  79.               END;
  80.               IF appwinsig IN signals THEN (* Got an AppMessage *)
  81.                 LOOP
  82.                   amsg := SYS.VAL (wb.AppMessagePtr,
  83.                     e.GetMsg (awport));
  84.                   IF amsg = NIL THEN EXIT END;
  85.                   IO.WriteF3
  86.                     ( "AppMsg: Type=%ld, ID=%ld, NumArgs=%ld\n",
  87.                       amsg.type, amsg.id, amsg.numArgs );
  88.                   FOR i := 0 TO amsg.numArgs - 1 DO
  89.                     IO.WriteF3
  90.                       ( "  arg(%ld): Name='%s', Lock=%lx\n",
  91.                         i, amsg.argList[i].name, amsg.argList[i].lock )
  92.                   END;
  93.                   e.ReplyMsg (amsg)
  94.                 END;
  95.               END;
  96.             END; (* WHILE *)
  97.             IF wb.RemoveAppWindow (appwin) THEN END
  98.           END; (* IF *)
  99.           I.CloseWindow (win)
  100.         END; (* IF *)
  101.         (* Make sure there are no more outstanding messages *)
  102.         LOOP
  103.           amsg := SYS.VAL (wb.AppMessagePtr,
  104.             e.GetMsg (awport));
  105.           IF imsg = NIL THEN EXIT END;
  106.           e.ReplyMsg (amsg)
  107.         END;
  108.         e.DeleteMsgPort (awport)
  109.       END; (* IF *)
  110.     END; (* IF *)
  111.   END; (* IF *)
  112. END AppWindow.
  113.